﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Web;

namespace Support
{
    public class DeleteFiles
    {
        /// <summary> 
        /// 删除文件夹 
        /// 用法： DeleteFolder(@"c:\\1"); 
        /// </summary> 
        /// <param name="dir"></param> 
        public static bool DeleteFolder(string dir)
        {
            bool isSuccess = true;
            try
            {
                // 循环文件夹里面的内容 
                foreach (string f in Directory.GetFileSystemEntries(dir))
                {
                    // 如果是文件存在 
                    if (File.Exists(f))
                    {
                        FileInfo fi = new FileInfo(f);
                        if (fi.Attributes.ToString().IndexOf("Readonly") != 1)
                        {
                            fi.Attributes = FileAttributes.Normal;
                        }
                        // 直接删除其中的文件 
                        File.Delete(f);
                    }
                    else
                    {
                        // 如果是文件夹存在 
                        // 递归删除子文件夹 
                        DeleteFolder(f);
                    }
                }
                // 删除已空文件夹 
                Directory.Delete(dir);
            }
            catch
            {
                isSuccess = false;
            }
            return isSuccess;
        }

        /// <summary> 
        /// 删除文件 
        /// 用法： DeleteFile(@"c:\\1\\1.jpg"); 
        /// </summary> 
        /// <param name="dir"></param> 
        public static bool DeleteFile(string file)
        {
            bool isSuccess = true;
            try
            {
                // 如果是文件存在 
                if (File.Exists(file))
                {
                    FileInfo fi = new FileInfo(file);
                    if (fi.Attributes.ToString().IndexOf("Readonly") != 1)
                    {
                        fi.Attributes = FileAttributes.Normal;
                    }
                    // 直接删除其中的文件 
                    File.Delete(file);
                }
            }
            catch
            {
                isSuccess = false;
            }
            return isSuccess;
        }
        /// <summary>
        /// 删除文件到回收站
        /// </summary>
        /// <param name="fullName"></param>
        /// <returns></returns>
        public static bool DeleteFileToRecycle(string fullName)
        {
            bool isSuccess = true;

            try
            {
                //为何不始用File.Delete()，是因为该方法不经过回收站，直接删除文件
                //要删除至回收站，可使用VisualBasic删除文件，需引用Microsoft.VisualBasic
                //删除确认对话框是根据电脑系统-回收站-显示删除确认对话框   是否打勾 自动添加的
                //为何不使用c#的File.Delete()方法？？？因为该方法是直接删除，而不是放入回收站
                Microsoft.VisualBasic.FileIO.FileSystem.DeleteFile(fullName,
                Microsoft.VisualBasic.FileIO.UIOption.AllDialogs,
                Microsoft.VisualBasic.FileIO.RecycleOption.SendToRecycleBin,
                Microsoft.VisualBasic.FileIO.UICancelOption.DoNothing);
            }
            catch
            {
                isSuccess = false;
            }
            return isSuccess;
        }

        /// <summary>
        /// 删除指定目录下的文件
        /// </summary>
        /// <param name="folder">指定目录（文件夹），虚拟目录，如：/downloads/validate</param>
        /// <param name="isDeleteToRecycle">是否删除到回收站</param>
        /// <param name="beforeMiutes">创建时间在几分钟以前的文件，-1则不限制</param>
        /// <param name="extension">要删除的文件扩展名，为空则不限制</param>
        /// <returns></returns>
        public static bool DeleteFolderFiles(string folder, bool isDeleteToRecycle, int beforeMiutes, string extension)
        {
            bool isSuccess = true;
            try
            {
                string folderPath = HttpContext.Current.Server.MapPath(folder);
                string[] fis = Directory.GetFiles(folderPath);
                foreach (var file in fis)
                {
                    if (!File.Exists(file))
                        continue;

                    FileInfo fi = new FileInfo(file);
                    if ((string.IsNullOrWhiteSpace(extension) || fi.Extension.ToLower() == extension.ToLower()) && (beforeMiutes == -1 || fi.CreationTime <= DateTime.Now.AddMinutes(-beforeMiutes)))
                    {
                        if (isDeleteToRecycle)
                        {
                            Microsoft.VisualBasic.FileIO.FileSystem.DeleteFile(file,
                            Microsoft.VisualBasic.FileIO.UIOption.AllDialogs,
                            Microsoft.VisualBasic.FileIO.RecycleOption.SendToRecycleBin,
                            Microsoft.VisualBasic.FileIO.UICancelOption.DoNothing);
                        }
                        else
                        {
                            File.Delete(file);
                        }
                    }

                }
            }
            catch
            {
                isSuccess = false;
            }
            return isSuccess;
        }

    }
}
